// 版权所有2009 Go作者。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package runtime

import (
	"runtime/internal/atomic"
	_ "unsafe" // for go:linkname 
)

// go:generate go run wincallback.go 
// go:generate go run mkduff.go 
// go:generate go run mkfastlog2table.go 

var ticks struct {
	lock mutex
	pad  uint32 // 确保386 
	val  uint64
}

// 注意：除了运行时代码外，还由运行时/pprof调用。
func tickspersecond() int64 {
	r := int64(atomic.Load64(&ticks.val))
	if r != 0 {
		return r
	}
	lock(&ticks.lock)
	r = int64(ticks.val)
	if r == 0 {
		t0 := nanotime()
		c0 := cputicks()
		usleep(100 * 1000)
		t1 := nanotime()
		c1 := cputicks()
		if t1 == t0 {
			t1++
		}
		r = (c1 - c0) * 1000 * 1000 * 1000 / (t1 - t0)
		if r == 0 {
			r++
		}
		atomic.Store64(&ticks.val, uint64(r))
	}
	unlock(&ticks.lock)
	return r
}

var envs []string
var argslice []string

// go:linkname syscall\u runtime\u envs syscall.runtime\u envs 
func syscall_runtime_envs() []string { return append([]string{}, envs...) }

// go:linkname syscall\u Getpagesize syscall.Getpagesize 
func syscall_Getpagesize() int { return int(physPageSize) }

// go:linkname os\u runtime\u args os.runtime\u args 
func os_runtime_args() []string { return append([]string{}, argslice...) }

// go:linkname syscall\u Exit syscall.Exit 
// go:nosplit 
func syscall_Exit(code int) {
	exit(int32(code))
}
